面试题:将一个字符串数组中的字母按照以下规则排列:表中任何单词的首字母与其前面单词的尾字母相同! 要求:字符串只由小写字母构成,且每个字符串长度在2-100之间
来源:互联网 发布:单片机题库及答案 编辑:程序博客网 时间:2024/05/24 05:04
package my_pro1;import java.util.ArrayList;import java.util.Iterator;public class WorkListOrder {public static int canArrangeWords(String[] arrys){ArrayList<String[]> arry=new ArrayList<>();ArrayList<String> alist=new ArrayList<String>();;for(int ii=0;ii<arrys.length;ii++){arry.add(arrys);//为arry分配内存空间;}if (jmarrys(arrys)) //判断字符串数组中的字符串是否满足要求;{ //第i1次进行字符串提取,找到符合要求的字符串将其保持至alist中,并在数组中删除该字符串;循环执行,直到数组中只剩一个元素;//循环次数为arry.size()-1,表示每次提取字符串,需要数组中存在至少两个元素;for(int i1=0;i1<arry.size()-1;i1++){String[] split=null;ArrayList<String> aaList = new ArrayList<>();String[] lingshi=arry.get(i1);if (tiqu(lingshi) != null){ //判断所提取的字符串是否为空;split=tiqu(lingshi).split("\\+"); //将字符串按+号分割,第一个元素为提取的字符串,第二个元素为该字符串尾字母匹配的字符串索引;alist.add(split[0]);//获取与提取字符串尾字母匹配的字符串,并将其放置字符串数组第一位;int b1=Integer.parseInt(split[1]);String st=lingshi[0];lingshi[0]=lingshi[b1];lingshi[b1]=st;}//在字符串数组中删除所提取的字符串,并将删除后的数组赋给一个新的字符串数组,for (int k = 0; k < arry.get(i1).length; k++)aaList.add(arry.get(i1)[k]);aaList.remove(split[0]);String[] newText = new String[aaList.size()]; arry.set(i1+1, aaList.toArray(newText));}//当字符串数组中只剩下最后一个元素时,直接将该元素添加到alist中;String[] lingshi2=arry.get(arry.size()-1);alist.add(lingshi2[0]);}if(alist.size()==arrys.length){Iterator<String> iterator=alist.iterator();while(iterator.hasNext()){String testString=(String)iterator.next();System.out.print(testString+" ");}System.out.println();return 1;}return -1;}/** * tiqu(String[] arrys):用于提取字符串数组中,其尾字母在数组中存在匹配首字母项, * 且其首字母在数组中不存在匹配项的字符串; * @param arrys:传入一个字符串数组; * @return:用于返回所提取字符串值及其索引和,与该字符串尾字母匹配的字符串索引; */public static String tiqu(String[] arrys){String str22=null;outer:for(int i=0;i<arrys.length;i++){for(int j=0;j<arrys.length;j++) {if (arrys[i]==arrys[j] )continue;if(equal(arrys[i],arrys[j])){for(int j1=0;j1<arrys.length;j1++){if (arrys[i]==arrys[j1] )continue;if(equal(arrys[j1],arrys[i])){continue outer;}else if(!equal(arrys[j1],arrys[i])){ str22=String.valueOf(j);return arrys[i]+"+"+j;}}} }}return null;}/** * equal():用于判断a1的尾字母和a2的首字母是否相等; * @return 相等返回true,否则返回false; */public static boolean equal(String a1,String a2){if((a1!= null)&&(a2!= null)){char[] ch1=a1.toCharArray();char[] ch2=a2.toCharArray();if(ch1[ch1.length-1]==ch2[0])return true;}return false;}public static boolean jmarrys(String[] arrys){int l=arrys.length;for(int i=0;i<l;i++){char[] ch=arrys[i].toCharArray();int l1=ch.length;if(l1>=2 && l1<=100){for (int j=0; j<l1; j++){if(ch[j]>='a' && ch[j]<='z')return true;}}}return false;}public static void main(String[] args){String[] strings={"dfgc","abcd","cdaf","fe","emn"};int s=canArrangeWords(strings); System.out.println(s);}}
IT小白,第一次上传代码,求提宝贵意见!
1 0
- 面试题:将一个字符串数组中的字母按照以下规则排列:表中任何单词的首字母与其前面单词的尾字母相同! 要求:字符串只由小写字母构成,且每个字符串长度在2-100之间
- 将一个字符串数组中的字母按照以下规则排列
- 编写一个程序,输入一串不超过60个字符组成的且不包含换行符的字符串,将字符串中的A到Z的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度相同,并且要求只对A到Z的字母重新排列,其
- 将字符串中的小写字母排在大写字母的前面
- java__给定由大写,小写字母和空格组成的字符串,返回 最后 一个单词的长度。 如果输入中不存在单词,返回 0。
- 谷歌面试题:将字符串中的小写字母排在大写字母的前面
- 17、有一个由大小写组成的字符串,现在需要对他进行修改, 将其中的所有小写字母排在答谢字母的前面(大写或小写字母之间不要求保持原来次序)
- LeetCode练习<二> 将字符串中的每个单词的字母颠倒,单词顺序不变
- 给定一个只包含小写字母的字符串,删除重复的字母,每个字母只出现一次。在所有结果中,输出字典顺序最小的。
- 按照单词的字母是否相同对字符串数组进行分组
- 谷歌:有一个由大小写组成的字符串,将其中的所有小写字母排在大写字母的前面
- [经典面试题]将字符串里的小写字母转换成大写的。 要求不通过比较
- 编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词(只使用循环,数组)
- 将字符串中的每个单词顺序进行颠倒,单词还是原来的单词,字母顺序不发生变化
- 对一个字符串重新排列要求字母在钱数字在后,且不改变字母数字间的原有顺序
- Java 统计一个字符串中每个单词,或者字母出现的次数
- 将字符串中的每个单词顺序进行颠倒,单词还是原来的单词,字母顺序不发生变化,将字符串中的空格用 代替
- 给出一个2D板和字典中的单词列表,找到棋盘上的所有单词。每个单词必须由顺序相邻单元格的字母构成。不能重复使用
- iOS 获取设备信息
- 欢迎使用CSDN-markdown编辑器
- leetcode笔记--Valid Anagram
- 回文数判断
- android--乐学成语--------复制数据库,测试数据库
- 面试题:将一个字符串数组中的字母按照以下规则排列:表中任何单词的首字母与其前面单词的尾字母相同! 要求:字符串只由小写字母构成,且每个字符串长度在2-100之间
- 自然连接
- Raspberry Pi 2无线路由器配置
- 图片的align属性
- Exchange 2010 PS 之导入导出邮箱!
- 【C++】Winsock套接字编程,struct sockaddr、sockaddr_in,主机网络字节序
- leetcode No7. Reverse Integer
- 自然连接与等值连接
- Ajax的原理是什么