題目描述:給出字符串,求其中的最長元音字母子字符串的長度。
e.g: 輸入的字符串為abbaacbioueabba, 由於元音字母是'a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U'這十個,在給出的字符串中,包含這十個字母的最長的子字符串的長度為5, 即iouea,故輸出為5.
----------------------------------------------------------------------分隔線-------------------------------------------------------------------------
其實這道題目與求最大子數組的和十分相似。
(LeetCode上面的674題,用的是相同的思路和方法 : https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/)
我們可以設一個count用以返回符合題目條件的長度,用一個暫時長度來記錄遇到元音字母時該子字符串的長度,記為temp,那么當遇到一個元音字母時,temp的長度就+1,如果此時的temp比count要大的話,更新count的值。如果遇到的字符不屬於元音字母時,temp的值歸零,這樣就可以刪除temp的記憶,即在遇到下一個元音字母時,temp以前的記錄不會保留。
實現代碼如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = ""; while(sc.hasNext()) { str = sc.nextLine(); int res = findLen(str); System.out.println(res); } } public static int findLen(String str) { char[] ch = str.toCharArray(); int count = 0, temp = 0; int len = ch.length; for(int i = 0; i < len; i++) { if(ch[i] == 'a' || ch[i] == 'e' || ch[i] == 'i' || ch[i] == 'o' || ch[i] == 'u' || ch[i] == 'A' || ch[i] == 'E' || ch[i] == 'I' || ch[i] == 'O' || ch[i] == 'U') { temp++; count = count > temp ? count : temp; }else temp = 0; } return count; } }