文章目录
题目
一、给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
示例 1:
输入:s = “Hello World”
输出:5
示例 2:
输入:s = " fly me to the moon "
输出:4
示例 3:
输入:s = “luffy is still joyboy”
输出:6
题目来源
解法
public class text {
public int strStr(String haystack) {
boolean flag=false;
int result=0;
char[] array=haystack.toCharArray();
for(int i=array.length-1;i>=0;i--)
{
if(array[i]!=' ')
{
flag=true;
result++;
}
if(array[i]==' '&&flag==true)
{
break;
}
}
return result;
}
public static void main(String[] args) {
String str=" fly me to the moon ";
System.out.println(new text().strStr(str));
}
}
二.给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。
如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。
示例 1:
输入:matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]]
输出:true
解释:
在上述矩阵中, 其对角线为:
“[9]”, “[5, 5]”, “[1, 1, 1]”, “[2, 2, 2]”, “[3, 3]”, “[4]”。
各条对角线上的所有元素均相同, 因此答案是 True 。
示例 2:
输入:matrix = [[1,2],[2,2]]
输出:false
解释:
对角线 “[1, 2]” 上的元素不同。
解法
public class text {
public static boolean check_elem(int [][]str,int x,int y ,int a) //x代表行,y代表列
{
boolean flag=true;
for(int i=0;i<a;i++) //行遍历
{
int j=0;
int count=str[i][j];
while(i<x&&j<y)
{
if(count!=str[i][j])
flag=false;
i++;
j++;
}
}
return flag;
}
public static boolean check(int [][]str,int x,int y)
{
boolean flag= text.check_elem(str,x,y,x); //遍历行
flag=text.check_elem(str,y,x,y);
return flag;
}
public static void main(String[] args) {
//矩阵可手动输入,这里光验证就不搞了
int x=2,y=2;
int [][]matrix = new int[][]{{1,2}, {2,2}};
boolean flag=text.check(matrix,x,y);
System.out.println(flag);
}
}
2*2数组验证正确
三、如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。
例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似。
总之,它们通过相似性形成了两个关联组:{“tars”, “rats”, “arts”} 和 {“star”}。注意,“tars” 和 “arts” 是在同一组中,即使它们并不相似。形式上,对每个组而言,要确定一个单词在组中,只需要这个词和该组中至少一个单词相似。
给你一个字符串列表 strs。列表中的每个字符串都是 strs 中其它所有字符串的一个字母异位词。请问 strs 中有多少个相似字符串组?
示例 1:
输入:strs = [“tars”,“rats”,“arts”,“star”]
输出:2
示例 2:
输入:strs = [“omv”,“ovm”]
输出:1
public class test_18 {
// "tars" 和 "rats" 是相似的 (交换 0 与 2 的位置); "rats" 和 "arts" 也是相似的,但是 "star" 不与 "tars","rats",或 "arts" 相似。
public static boolean test_is_similar(String str1,String str2)
{
if(str1==str2) return true;
boolean flag=true;
char []temp=str1.toCharArray(); //将string类型转变为char数组类型
char []temp2=str2.toCharArray();
int i=0;
int index=0;
for(i=0;i<temp.length;i++)
{
//System.out.print("第"+i+"个字符"); test的代码
for(int k=index;k<temp2.length;k++)
{
if(temp[i]==temp2[k])
{
index=k;
break;
}
}
//System.out.println("相同位置"+index); test的代码
if(i==index)
{
index++;
continue;
}
if(temp[index]==temp2[i])
{
for(int j=0;j<temp.length;j++) { //判读其他字符是否相等
if(j!=i&&j!=index)
{
if(temp[j]!=temp2[j])
{
flag=false;
return flag;
}
}
}
if(flag=true)
return true;
}
}
if(i==temp.length)
{
return false;
}
return flag;
}
public static void main(String[] args) {
int result=0;
String []strs=new String[]{"tars","rats","arts","star"};
for(int i=0;i<strs.length;i++)
{
for(int j=i+1;j<strs.length;j++)
{
if(test_is_similar(strs[i],strs[j]))
result++;
}
}
System.out.println("最后结果是"+result);
}
}
结果截图:
在写的时候要注意有相同字母的字符串怎么进行类似操作。